package club.janna.hello.util;

import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;

/**
 * guopanbo
 * Created by guopanbo on 17/12/25.
 */
public class DataConvertor {

    /**
     * 字节数字转16进制字符串
     * @param ba
     * @return
     */
    public static String Byte2String(byte[] ba){
        if(ba == null || ba.length == 0)
            return null;
        Formatter f = new Formatter();
        for(int i = 0; i < ba.length; ++i){
            f.format("%02x ", ba[i]);
        }
        return f.toString();
    }

    /**
     * int 类型的2个字节转换为int
     * 先低后高（first low after high）
     * @param i1
     * @param i2
     * @return
     */
    public static int int2Byte2IntFLAH(int i1, int i2) {
        return i2 << 8 | i1;
    }

    /**
     * int 类型的3个字节转换为int
     * 先低后高（first low after high）
     * @param i1
     * @param i2
     * @param i3
     * @return
     */
    public static int int3Byte2IntFLAH(int i1, int i2, int i3) {
        return i3 << 16 | i2 << 8 | i1;
    }

    /**
     * int 类型的4个字节转换为float
     * 先低后高（first low after high）
     * @param i1
     * @param i2
     * @param i3
     * @param i4
     * @return
     */
    public static float int4Byte2FloatFLAH(int i1, int i2, int i3, int i4) {
        return Float.intBitsToFloat(i4 << 24 | i3 << 16 | i2 << 8 | i1);
    }

    /**
     * 空格分割符字符串
     * 每两位添加一个空格分隔符
     * @param str
     * @return
     */
    public static String delimiterStringBySpace(String str) {
        if(str == null || str.trim().equals(""))
            return null;
        String regex = "(.{2})";
        String result = str.replaceAll (regex, "$1 ");
        return result;
    }

    /**
     * 逗号分割的字符串转换为int数组
     * @param str
     * @return
     */
    public static int[] commaSeparationString2IntArray(String str) {
        if(str == null || str.trim().equals(""))
            return null;
        String[] strArr = str.split(",");
        if(strArr.length == 0)
            return null;
        int[] r = new int[strArr.length];
        for(int i = 0; i < strArr.length; i ++) {
            if(strArr[i] != null && !strArr[i].trim().equals(""))
                r[i] = Integer.parseInt(strArr[i]);
            else
                r[i] = -1;
        }
        return r;
    }

    public static int[] HexByteArray2DecArray(byte[] ba){
        if(ba == null || ba.length == 0)
            return null;
        int[] r = new int[ba.length];
        for(int i = 0; i < ba.length; ++i){
            r[i] = Integer.parseInt(String.format("%02x", ba[i]), 16);
        }
        return r;
    }

    /**
     * 添加十进制int数组转换为byte数组
     * @param ia
     * @return
     */
    public static byte[] decArray2ByteArray(int[] ia) {
        if(ia == null || ia.length == 0)
            return null;
        byte[] r = new byte[ia.length];
        for(int i = 0; i < ia.length; i ++) {
            r[i] = (byte)ia[i];
        }
        return r;
    }

    /**
     * bcd码转10进制数
     * @param b
     * @return
     */
    public static int bcd2Dec(int b) {
        return (b >> 4) * 10 + (b & 0b1111);
    }

    /**
     * 十进制转bcd
     * @param d
     * @return
     */
    public static int dec2Bcd(int d) {
        return ((d / 10) << 4) | (d % 10);
    }

    /**
     * 获取时间
     * @param s
     * @param m
     * @param h
     * @param d
     * @param M
     * @param y
     * @return
     */
    public static Date getDate(int s, int m, int h, int d, int M, int y) {
        Calendar cale = Calendar.getInstance();
        cale.set(Calendar.YEAR, y + 2000);
        cale.set(Calendar.MONTH, M - 1);
        cale.set(Calendar.DAY_OF_MONTH, d);
        cale.set(Calendar.HOUR_OF_DAY, h);
        cale.set(Calendar.MINUTE, m);
        cale.set(Calendar.SECOND, s);
        return cale.getTime();
    }
}
